
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>JDK 中用到了哪些设计模式？ - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>JDK 中用到了哪些设计模式？ - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">单例模式（Singleton Pattern）的核心定义是什么？请举出JDK中的一个应用实例。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">单例模式的定义是：确保一个类只有一个实例，并提供全局访问点。JDK中的一个实例是 `java.lang.Runtime`，它负责管理Java应用程序的运行时环境，并确保全局只有一个实例。</div>
          </div>
          <div class="card-source">来源: 1. 单例模式（Singleton Pattern）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">在JDK中，`java.lang.StringBuilder` 和 `java.lang.StringBuffer` 是哪个设计模式的应用？该模式的作用是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">它们是建造者模式（Builder Pattern）的应用。该模式的作用是将一个复杂对象的构建与其表示分离，使得同样的构建过程可以创建不同的表示。</div>
          </div>
          <div class="card-source">来源: 4. 建造者模式（Builder Pattern）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">`java.io` 包中的 `BufferedReader` 和 `PrintWriter` 等类体现了哪种设计模式？这种模式如何增强对象功能？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">这些类体现了装饰者模式（Decorator Pattern）。该模式通过动态地给对象添加一些额外的职责来增强功能，这种方式比生成子类更为灵活。</div>
          </div>
          <div class="card-source">来源: 6. 装饰者模式（Decorator Pattern）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">什么是工厂方法模式（Factory Method Pattern）？`java.util.Calendar` 是如何利用该模式的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">工厂方法模式定义了一个创建对象的接口，让子类决定实例化哪个类。`java.util.Calendar` 使用 `getInstance()` 方法来创建实例，该方法会根据地区和语言选择合适的具体实现类。</div>
          </div>
          <div class="card-source">来源: 2. 工厂方法模式（Factory Method Pattern）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">JDK的动态代理功能是由哪个类实现的？它体现了哪种设计模式？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">JDK的动态代理功能是由 `java.lang.reflect.Proxy` 类实现的，它体现了代理模式（Proxy Pattern），该模式为其他对象提供一种代理以控制对这个对象的访问。</div>
          </div>
          <div class="card-source">来源: 7. 代理模式（Proxy Pattern）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">策略模式（Strategy Pattern）的定义是什么？请以 `java.util.Comparator` 为例说明其在JDK中的应用。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">策略模式的定义是：定义一系列算法，将每一个算法封装起来，并使它们可以互换。`java.util.Comparator` 就是一个应用实例，它定义了比较对象的策略，允许用户根据需要选择不同的比较方法。</div>
          </div>
          <div class="card-source">来源: 9. 策略模式（Strategy Pattern）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">模板方法模式（Template Method Pattern）是如何工作的？JDK集合框架中的哪些抽象类是该模式的典型应用？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">该模式在一个方法中定义算法的骨架，而将一些步骤延迟到子类中实现。JDK中的 `java.util.AbstractList` 和 `java.util.AbstractMap` 是典型应用，它们提供了基础实现，而具体的子类（如 `ArrayList`）只需实现具体的细节。</div>
          </div>
          <div class="card-source">来源: 10. 模板方法模式（Template Method Pattern）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">原型模式（Prototype Pattern）的目标是什么？Java的 `Object` 类中哪个方法是该模式的体现？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">原型模式的目标是通过复制现有对象而不是重新创建对象来生成新实例。`java.lang.Object` 类中的 `clone()` 方法是该模式的一种实现，它允许对象进行浅拷贝。</div>
          </div>
          <div class="card-source">来源: 5. 原型模式（Prototype Pattern）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">观察者模式（Observer Pattern）定义了怎样一种对象间的依赖关系？JDK中哪些类（尽管已过时）是用于实现此模式的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">观察者模式定义了对象间的一对多依赖关系，当一个对象的状态发生变化时，可以自动通知所有依赖于它的对象。在JDK中，`java.util.Observer` 和 `java.util.Observable` 类曾用于此模式的实现，但它们在JDK 9中已被标记为过时。</div>
          </div>
          <div class="card-source">来源: 8. 观察者模式（Observer Pattern）</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
